/**
 * 从顺序表L中删除删除其值在给定值s到t之间所有的元素
 * 
 * 
 * */

#include <stdio.h>
#include <stdlib.h>

#define MAX_SIZE 50		// 线性表的最大长度
#define ElemType int    // 元素存储类型
#define bool int
#define true !0
#define false 0

typedef struct {
	ElemType data[MAX_SIZE];
	int length;			// 顺序表当前长度
} SqList;

/**
 * 1[0]	3[1]	4[2]	1[3]	7[4]	4[5]	3[6]	6[7],要删除的值区间为s=2,t=5
 * 第一轮:i=0,k=0,1<s,data[i-k]=data[i]->data[0]=1
 * 第二轮:i=1,s<3<t,k=0->k=1
 * 第三轮:i=2,s<4<t,k=1->k=2
 * 第四轮:i=3 1<s,data[i-k]=data[i]->data[1]=1
 * 第三轮:i=4,t>t,data[i-k]=data[i]->data[2]=7
 * 第四轮:i=5,s<4<t;k=2->k=3
 * 第五轮:i=6,s<3<t;data[i-k]=data[i]->data[3]=3
 * 第六轮:i=7,6>t;data[i-k]=data[i]->data[4]=6;
 * 
 * L.length = L.length - k
 */
void Delete_s_t(SqList& L, ElemType s, ElemType t)
{
	int k=0;	//用元素k记录s-t之间元素的个数
	if(L.length == 0 || s>t){
		printf("顺序表L为空\n");
		return;
	}
	for(int i=0; i<L.length; i++) {
		if(L.data[i] >= s && L.data[i] <= t) k++;
		else L.data[i-k] = L.data[i];
	}
	//更新长度
	L.length -= k;
}
